www.gusucode.com > vc++ 远程控制示例源程序-源码程序 > vc++ 远程控制示例源程序-源码程序\code\PeerYouC\RegeditValueBinbDlg.cpp

    // RegeditValueBinbDlg.cpp : implementation file
// Download by http://www.NewXing.com

#include "stdafx.h"
#include "PeerYouC.h"
#include "RegeditValueBinbDlg.h"
#include "mainfrm.h"
#include "command.h"
#include "peersocket.h"
#include "hexeditctrl.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CRegeditValueBinbDlg dialog
void MakeRegInfo(CTreeCtrl& tree,HTREEITEM item,REGEDIT &reg)
{
	HTREEITEM parent;
	char value[512],tmp[512];
	value[0]=0;tmp[0]=0;
	strcpy(value,tree.GetItemText(item));
	if(strcmp(value,"HKEY_CLASSES_ROOT")==0||
			strcmp(value,"HKEY_CURRENT_USER")==0||
			strcmp(value,"HKEY_LOCAL_MACHINE")==0||
			strcmp(value,"HKEY_USERS")==0||
			strcmp(value,"HKEY_CURRENT_CONFIG")==0)
		{
			strcpy(reg.key,value);
			reg.sunkey[0]=0;
			return;
		}
	parent=item;
	while((parent=tree.GetParentItem(parent)))
	{
		strcpy(tmp,tree.GetItemText(parent));
		if(strcmp(tmp,"HKEY_CLASSES_ROOT")==0||
			strcmp(tmp,"HKEY_CURRENT_USER")==0||
			strcmp(tmp,"HKEY_LOCAL_MACHINE")==0||
			strcmp(tmp,"HKEY_USERS")==0||
			strcmp(tmp,"HKEY_CURRENT_CONFIG")==0)
		{
			strcpy(reg.key,tmp);
			strcpy(reg.sunkey,value);
			return;
		}
		else
		{
			strcat(tmp,"\\");
			strcat(tmp,value);
			strcpy(value,tmp);
		}
	}
}

CRegeditValueBinbDlg::CRegeditValueBinbDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CRegeditValueBinbDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CRegeditValueBinbDlg)
	m_name = _T("");
	//}}AFX_DATA_INIT
}


void CRegeditValueBinbDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CRegeditValueBinbDlg)
	DDX_Control(pDX, IDC_DATA, m_data);
	DDX_Text(pDX, IDC_NAME, m_name);
	DDV_MaxChars(pDX, m_name, 255);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CRegeditValueBinbDlg, CDialog)
	//{{AFX_MSG_MAP(CRegeditValueBinbDlg)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CRegeditValueBinbDlg message handlers

void CRegeditValueBinbDlg::OnOK() 
{
	// TODO: Add extra validation here
	UpdateData();
	if(m_name.GetLength()==0)
	{
		MessageBox("数值名不能为空");
		return;
	}
	CDialog::OnOK();
}

BOOL CRegeditValueBinbDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	CMainFrame* pMainFrm=(CMainFrame*)AfxGetApp()->GetMainWnd();
	CListCtrl& list=pMainFrm->m_pRegList->GetListCtrl();
	CTreeCtrl& tree=pMainFrm->m_pRegTree->GetTreeCtrl();
	HTREEITEM treeselectitem=tree.GetSelectedItem();
	int index=list.GetSelectionMark();
	if(index>-1)
	{
		CString type;
		m_name=list.GetItemText(index,0);
		type=list.GetItemText(index,1);
		CEdit *edit=(CEdit*)GetDlgItem(IDC_NAME);
		
		REGEDIT reg;
		MakeRegInfo(tree,treeselectitem,reg);
		strcpy(reg.value,m_name);
		if(type=="REG_BINARY")
			reg.type=REG_BINARY;
		if(type=="REG_RESOURCE_LIST")
			reg.type=REG_RESOURCE_LIST;
		if(type=="REG_FULL_RESOURCE_DESCRIPTOR")
			reg.type=REG_FULL_RESOURCE_DESCRIPTOR;
		if(type=="REG_LINK")
			reg.type=REG_LINK;

		SOCKET s;
		DWORD ret;
		if(!PeerCreateSocket(&s,PEER_STREAM))
		{
			return false;
		}
		WSAEVENT hevent=WSACreateEvent();
		if(PeerConnectSocket(s,ADDRESS,7788))
		{
			COMMAND cmd;
			memset(&cmd,0,sizeof(cmd));
			cmd.CommandID=PEER_REGEDIT_GETVALUE;
			if(!PeerSendDataS(s,(char*)&cmd,sizeof(cmd),&ret,hevent))
			{
				WSACloseEvent(hevent);
				PeerCloseSocket(s);
				return false;

			}
			if(!PeerSendDataS(s,(char*)&reg,sizeof(reg),&ret,hevent))
			{
				WSACloseEvent(hevent);
				PeerCloseSocket(s);
				return false;
			}
			else
			{
				if(!PeerRecvDataS(s,(char*)&reg,sizeof(reg),&ret,hevent)||ret!=sizeof(reg))
				{
					WSACloseEvent(hevent);
					PeerCloseSocket(s);
					return false;
				}
				m_data.SetData(reg.data,reg.datalen);
				m_data.SetFocus();
				UpdateData(false);
			}
		}
		edit->EnableWindow(false);
		WSACloseEvent(hevent);
		PeerCloseSocket(s);
	}
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}